<?php

/**
 * This is the model class for table "portalweb.usuarios".
 *
 * The followings are the available columns in table 'portalweb.usuarios':
 * @property string $id
 * @property string $usuario
 * @property string $contrasena
 * @property string $correo
 * @property string $creado_el
 * @property string $actualizado_el
 * @property boolean $esta_activo
 * @property boolean $esta_deshabilitado
 * @property boolean $correo_verificado
 * @property string $llave_activacion
 * @property string $ultima_visita_el
 * @property string $nombre
 * @property string $cedula
 * @property string $cargo
 * @property string $unidad_administrativa
 * @property string $rol
 * @property string $apellido
 *
 * The followings are the available model relations:
 * @property Descargas[] $descargases
 * @property Descargas[] $descargases1
 * @property Archivos[] $archivoses
 * @property Noticias[] $noticiases
 * @property Noticias[] $noticiases1
 * @property PreguntasFrecuentes[] $preguntasFrecuentes
 * @property PreguntasFrecuentes[] $preguntasFrecuentes1
 * @property Activerecordlog[] $activerecordlogs
 * @property Avisos[] $avisoses
 * @property Avisos[] $avisoses1
 * @property Tramites[] $tramites
 * @property Tramites[] $tramites1
 * @property UserUsedPasswords[] $userUsedPasswords
 * @property UserLoginAttempts[] $userLoginAttempts
 */
class Usuarios extends CActiveRecord
{
	public $contrasena_inicial;
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'portalweb.usuarios';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('usuario, contrasena, correo, creado_el, actualizado_el, unidad_administrativa, rol', 'required'),
			array('usuario, correo, llave_activacion, nombre, apellido, cedula, cargo, unidad_administrativa', 'length', 'max'=>255),
			array('contrasena', 'length', 'max'=>50),
			array('esta_activo, correo_verificado, ultima_visita_el', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, usuario, contrasena, correo, creado_el, actualizado_el, esta_activo, esta_deshabilitado, correo_verificado, llave_activacion, ultima_visita_el, nombre, cedula, cargo, unidad_administrativa, rol', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'descargases' => array(self::HAS_MANY, 'Descargas', 'autorizado_por'),
			'descargases1' => array(self::HAS_MANY, 'Descargas', 'creado_por'),
			'archivoses' => array(self::HAS_MANY, 'Archivos', 'creado_por'),
			'noticiases' => array(self::HAS_MANY, 'Noticias', 'autorizado_por'),
			'noticiases1' => array(self::HAS_MANY, 'Noticias', 'creado_por'),
			'preguntasFrecuentes' => array(self::HAS_MANY, 'PreguntasFrecuentes', 'autorizado_por'),
			'preguntasFrecuentes1' => array(self::HAS_MANY, 'PreguntasFrecuentes', 'creado_por'),
			'activerecordlogs' => array(self::HAS_MANY, 'Activerecordlog', 'usuario_id'),
			'avisoses' => array(self::HAS_MANY, 'Avisos', 'autorizado_por'),
			'avisoses1' => array(self::HAS_MANY, 'Avisos', 'creado_por'),
			'tramites' => array(self::HAS_MANY, 'Tramites', 'autorizado_por'),
			'tramites1' => array(self::HAS_MANY, 'Tramites', 'creado_por'),
			'userUsedPasswords' => array(self::HAS_MANY, 'UserUsedPasswords', 'user_id'),
			'userLoginAttempts' => array(self::HAS_MANY, 'UserLoginAttempts', 'user_id'),
		);
	}

    public function hashPassword($valor)
    {
        return md5($valor);
    }
	/**
	* Autentica la contrasena.
	* 
	*/
    public function verificarContrasena($contrasena){

    	if($this->hashPassword($contrasena) == $this->contrasena_inicial)
    		return true;
    	else
    		return false;
    	
		/*require(Yii::getPathOfAlias('usr.extensions').DIRECTORY_SEPARATOR.'password.php');
		return $this->contrasena !== null && password_verify($contrasena, $this->contrasena);*/

    }

    public function afterFind()
    {
       //reset the contrasena to null because we don't want the hash to be shown.
        $this->contrasena_inicial = $this->contrasena;
        //$this->contrasena = null;

        $this->usuario = strtolower($this->usuario);
 		$this->correo = strtolower($this->correo);

        parent::afterFind();
    }

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'usuario' => 'Usuario',
			'contrasena' => 'Contrasena',
			'correo' => 'Correo',
			'creado_el' => 'Creado El',
			'actualizado_el' => 'Actualizado El',
			'esta_activo' => 'Esta Activo',
			'esta_deshabilitado' => 'Esta Deshabilitado',
			'correo_verificado' => 'Correo Verificado',
			'llave_activacion' => 'Llave Activacion',
			'ultima_visita_el' => 'Ultima Visita El',
			'nombre' => 'Nombre',
			'apellido' => 'Apellido',
			'cedula' => 'Cedula',
			'cargo' => 'Cargo',
			'unidad_administrativa' => 'Unidad Administrativa',
			'rol' => 'Rol',

		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id,true);
		$criteria->compare('usuario',$this->usuario,true);
		$criteria->compare('contrasena',$this->contrasena,true);
		$criteria->compare('correo',$this->correo,true);
		$criteria->compare('creado_el',$this->creado_el,true);
		$criteria->compare('actualizado_el',$this->actualizado_el,true);
		$criteria->compare('esta_activo',$this->esta_activo);
		$criteria->compare('esta_deshabilitado',$this->esta_deshabilitado);
		$criteria->compare('correo_verificado',$this->correo_verificado);
		$criteria->compare('llave_activacion',$this->llave_activacion,true);
		$criteria->compare('ultima_visita_el',$this->ultima_visita_el,true);
		$criteria->compare('nombre',$this->nombre,true);
		$criteria->compare('cedula',$this->cedula,true);
		$criteria->compare('cargo',$this->cargo,true);
		$criteria->compare('unidad_administrativa',$this->unidad_administrativa,true);
		$criteria->compare('rol',$this->rol,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return Usuarios the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
}
